/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managedbean;

import common.FornituraEstesa;
import ejb.common.DettaglioPrezzoManagerLocal;
import ejb.negozio.AddettoNegozioEJBLocal;
import ejb.negozio.FornituraEJBLocal;
import entity.AddettoNegozio;
import entity.DettaglioPrezzo;
import entity.Fornitura;
import entity.Marchio;
import entity.Prodotto;
import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
import java.util.ResourceBundle;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.context.FacesContext;
import utility.ExceptionThrower;
import utility.ListFornituraEstesa;
import utility.ResourceBundleLoader;

/**
 *
 * @author Antonio
 */
public class GestioneFornitura implements Serializable {

    @EJB
    private AddettoNegozioEJBLocal addettoNegozioEJB;
    @EJB
    private DettaglioPrezzoManagerLocal dettaglioPrezzoManager;
    @EJB
    private FornituraEJBLocal fornituraEJB;
    private int quantita;
    private Marchio marchio;
    private float prezzo;
    private List<Prodotto> prodotti;
    private List<Marchio> marchi;
    private List<FornituraEstesa> fornitureEstese;
    private Prodotto prodotto;

    public void setIdAddetto(Long idAddetto) {

        if (idAddetto == null) {

            return;
        }

        addettoNegozioEJB.setId(idAddetto);
    }// setIdAddetto

    public Long getIdAddetto() {

        return addettoNegozioEJB.getId();
    }// getIdAddetto

    public void setidNegozio(Long idNegozio) {

        if (idNegozio == null) {

            return;
        }

        addettoNegozioEJB.setIdNegozio(idNegozio);
    }// setidNegozio

    public Long getIdNegozio() {

        return addettoNegozioEJB.getIdNegozio();
    }// getIdAddetto

    public void setNomeAddetto(String nome) {

        if (nome == null) {

            return;
        }

        addettoNegozioEJB.setNome(nome);
    }// setNomeAddetto

    public String getNomeAddetto() {

        return addettoNegozioEJB.getNome();
    }// getNomeAddetto

    public void setAddetto(AddettoNegozio addetto) {

        if (addetto == null) {

            return;
        }

        this.setIdAddetto(addetto.getId());
        this.setNomeAddetto(addetto.getNome());
        this.setidNegozio(addetto.getNegozio().getId());
    }

    /**
     * Get the value of prodotto
     *
     * @return the value of prodotto
     */
    public Prodotto getProdotto() {
        return prodotto;
    }

    /**
     * Set the value of prodotto
     *
     * @param prodotto new value of prodotto
     */
    public void setProdotto(Prodotto prodotto) {

        if (prodotto == null) {

            return;
        }

        this.prodotto = prodotto;
    }

    /**
     * Get the value of fornitureEstese
     *
     * @return the value of fornitureEstese
     */
    public List<FornituraEstesa> getFornitureEstese() {
        return fornitureEstese;
    }

    /**
     * Set the value of fornitureEstese
     *
     * @param fornitureEstese new value of fornitureEstese
     */
    public void setFornitureEstese(List<FornituraEstesa> fornitureEstese) {
        this.fornitureEstese = fornitureEstese;
    }

    /**
     * Get the value of marchi
     *
     * @return the value of marchi
     */
    public List<Marchio> getMarchi() {
        return marchi;
    }

    /**
     * Set the value of marchi
     *
     * @param marchi new value of marchi
     */
    public void setMarchi(List<Marchio> marchi) {

        if (marchi == null) {
            return;
        }

        this.marchi = marchi;
    }

    /**
     * Get the value of prodotti
     *
     * @return the value of prodotti
     */
    public List<Prodotto> getProdotti() {
        return prodotti;
    }

    /**
     * Set the value of prodotti
     *
     * @param prodotti new value of prodotti
     */
    public void setProdotti(List<Prodotto> prodotti) {

        if (prodotti == null) {
            return;
        }

        this.prodotti = prodotti;
    }

    /**
     * Get the value of prezzo
     *
     * @return the value of prezzo
     */
    public float getPrezzo() {
        return prezzo;
    }

    /**
     * Set the value of prezzo
     *
     * @param prezzo new value of prezzo
     */
    public void setPrezzo(float prezzo) {
        this.prezzo = prezzo;
    }

    public Marchio getMarchio() {
        return marchio;
    }

    public void setMarchio(Marchio marchio) {
        this.marchio = marchio;
    }

    /**
     * Get the value of quantita
     *
     * @return the value of quantita
     */
    public int getQuantita() {

        return quantita;
    }

    /**
     * Set the value of quantita
     *
     * @param quantita new value of quantita
     */
    public void setQuantita(int quantita) {
        this.quantita = quantita;
    }

    /**
     * Creates a new instance of GestioneFornitura
     */
    public GestioneFornitura() {
    }

    public void creaFornitura() {

        FacesContext fc = FacesContext.getCurrentInstance();
        ResourceBundle rb = ResourceBundleLoader.getResourceBundle(fc);

        if (quantita <= 0) {

            ExceptionThrower.throwMessageError(fc, rb, "quantitaErrorM");
            return;
        } else if (prezzo <= 0) {

            ExceptionThrower.throwMessageError(fc, rb, "prezzoErrorM");
            return;
        }

        java.util.Date utilDate = new java.util.Date();
        java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

        Fornitura fornitura = new Fornitura();
        fornitura.setData(sqlDate);
        fornitura.setProdotto(prodotto);
        fornitura.setQuantita(quantita);
        fornitura.setAddettoNegozio(addettoNegozioEJB.getAddetto());
        fornitura.setNegozio(addettoNegozioEJB.getNegozio());

        DettaglioPrezzo dettaglio = new DettaglioPrezzo();
        dettaglio.setProdotto(prodotto);
        dettaglio.setNegozio(addettoNegozioEJB.getNegozio());
        dettaglio.setPrezzo(prezzo);

        FornituraEstesa fs = new FornituraEstesa(fornitura, dettaglio);

        fornitureEstese.add(fs);

    }// creaFornitura

    public void rimuoviFornituraRecente() {

        FacesContext fc = FacesContext.getCurrentInstance();
        ResourceBundle rb = ResourceBundleLoader.getResourceBundle(fc);

        if (fornitureEstese.isEmpty()) {

            ExceptionThrower.throwMessageError(fc, rb, "fornituraInesistenteM");
            return;
        } else {

            Iterator it = fornitureEstese.iterator();
            while (it.hasNext()) {

                it.next();
                if (!it.hasNext()) {

                    it.remove();
                }
            }
        }
    }// rimuoviFornituraRecente

    public void svuotaRiepilogo() {

        FacesContext fc = FacesContext.getCurrentInstance();
        ResourceBundle rb = ResourceBundleLoader.getResourceBundle(fc);

        if (fornitureEstese.isEmpty()) {

            ExceptionThrower.throwMessageError(fc, rb, "fornituraInesistenteM");
            return;
        } else {

            Iterator it = fornitureEstese.iterator();
            while (it.hasNext()) {

                it.next();
                it.remove();
            }
        }
    }// svuotaRiepilogo

    public void confermaFornitura() {

        FacesContext fc = FacesContext.getCurrentInstance();
        ResourceBundle rb = ResourceBundleLoader.getResourceBundle(fc);

        if (fornituraEJB.generaFornitureEstese(fornitureEstese)) {

            ExceptionThrower.throwMessageInfo(fc, rb, "fornituraAddM");
            this.svuotaRiepilogo();
            this.creaMarchi();
        } else {

            ExceptionThrower.throwMessageError(fc, rb, "fornituraAddInesistenteM");
        }
    }// confermaFornitura

    public void ottieniProdotti() {

        prodotti = dettaglioPrezzoManager.prodottiMarchioNonInVendita(marchio.getId(), addettoNegozioEJB.getIdNegozio());

    }// ottieniProdotti

    public void creaMarchi() {

        if (this.getIdNegozio() == null) {
            return;
        }

        this.marchi = dettaglioPrezzoManager.marchiNonInVendita(this.getIdNegozio());
    }// creaMarchi

    public void dimenticaSelezione() {

        prodotti = null;
        marchio = null;
        prodotto = null;
        prezzo = 0;
        quantita = 0;
    }// dimenticaSelezione

    @PostConstruct
    public void init() {

        fornitureEstese = new ListFornituraEstesa();
    }
}
